Command Class
#udemy
#Unity
キーの入力をそのままアニメーションの再生にハードコートするのではなく、
1. Commnad 抽象クラス、Execute(Animator)抽象メソッドを作成
2. それを継承、OverloadしたClassを作り、Executeの中身を変える。
3. InputHandlerクラスをコンポーネントとして作る
4. keyQ, keyW, keyEといったキーごとのCommandクラス変数を作る。
ここがキーコンフィグをカスタマイズできるポイント
5. InputHandlerクラス内で、入力を検出してCommand.Execute(anim)する処理を書く
code: Command.cs
public abstract class Command : MonoBehaviour
{
public abstract void Execute(Animator anim);
}
public class PerformJump : Command
{
public override void Execute(Animator anim)
{
anim.SetTrigger("isJumping");
}
}
public class PerformPunch : Command
{
public override void Execute(Animator anim)
{
anim.SetTrigger("isPunching");
}
}
public class PerformKick : Command
{
public override void Execute(Animator anim)
{
anim.SetTrigger("isKicking");
}
}
public class DoNothing : Command
{
public override void Execute(Animator anim)
{
}
}
code: InputHandler.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class InputHandler : MonoBehaviour
{
public GameObject actor;
Animator anim;
Command keyQ, keyW, keyE;
void Start()
{
keyQ = new PerformJump();
keyW = new PerformPunch();
keyE = new PerformKick();
anim = actor.GetComponent<Animator>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Q))
keyQ.Execute(anim);
else if (Input.GetKeyDown(KeyCode.W))
keyW.Execute(anim);
else if (Input.GetKeyDown(KeyCode.E))
keyE.Execute(anim);
}
}
C# は純粋なオブジェクト指向プログラミング。
単なる関数もオブジェクトメソッドとして書く。